﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DO = DataObjects;
using DM = DataMapping;
using System.IO;
using System.Data.Linq;

namespace DataAccess
{
    public class VendaDB
    {
        public static DO.Venda GetItem(int id)
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                DM.Venda venda = (from v in dc.Vendas
                                  where v.idVenda == id
                                  select v).FirstOrDefault();

                return FillRecord(venda);
            }
        }

        public static List<DO.Venda> GetList()
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                List<DM.Venda> vendaList = (from v in dc.Vendas
                                            select v).ToList();

                List<DO.Venda> vendaListReturn = new List<DO.Venda>();
                foreach (DM.Venda c in vendaList)
                    vendaListReturn.Add(FillRecord(c));

                return vendaListReturn;
            }
        }

        public static int Save(DO.Venda venda)
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                DM.Venda vendaDB = (from v in dc.Vendas
                                    where v.idVenda == venda.Id
                                    select v).FirstOrDefault();

                if (vendaDB == null)
                {
                    vendaDB = new DM.Venda();

                    vendaDB.BancoGravame = venda.BancoGravame;
                    vendaDB.ClassificacaoGravame = venda.ClassificacaoGravame;
                    vendaDB.ClassificacaoMultas = venda.ClassificacaoMultas;
                    vendaDB.DtCompra = venda.DtCompra;
                    vendaDB.DtPrimParcelaCartao = venda.DtPrimParcelaCartao;
                    vendaDB.DtSaldo = venda.DtSaldo;
                    //vendaDB.FormaPagamento_Vendas = venda.f
                    vendaDB.FormaPagtoComissaoCorretor = venda.FormaPagtoComissaoCorretor;
                    vendaDB.Gravame = venda.Gravame;
                    vendaDB.idCliente = venda.IdCliente;
                    vendaDB.idCorretor = venda.IdCorretor;
                    vendaDB.idVendedor = venda.IdVendedor;
                    vendaDB.idVenda = venda.Id;
                    vendaDB.LicenciamentoMes = venda.LicenciamentoMes;
                    vendaDB.QtdeVezesCartao = venda.QtdeVezesCartao;
                    vendaDB.SaldoDescontar = venda.SaldoDescontar;
                    vendaDB.SaldoPagar = venda.SaldoPagar;
                    vendaDB.SaldoQuitacao = venda.SaldoQuitacao;
                    vendaDB.ValorMultas = venda.ValorMultas;
                    vendaDB.VlrCartao = venda.VlrCartao;
                    vendaDB.VlrCheque = venda.VlrCheque;
                    vendaDB.VlrComissaoCorretor = venda.VlrComissaoCorretor;
                    vendaDB.VlrCompra = venda.VlrCompra;
                    vendaDB.VlrEspecie = venda.VlrEspecie;
                    vendaDB.VlrLicenciamento = venda.VlrLicenciamento;
                    vendaDB.VlrTransfBancaria1 = venda.VlrTransfBancaria1;
                    vendaDB.VlrTransfBancaria2 = venda.VlrTransfBancaria2;

                    dc.Vendas.InsertOnSubmit(vendaDB);
                }
                else
                {
                    vendaDB.BancoGravame = venda.BancoGravame;
                    vendaDB.ClassificacaoGravame = venda.ClassificacaoGravame;
                    vendaDB.ClassificacaoMultas = venda.ClassificacaoMultas;
                    vendaDB.DtCompra = venda.DtCompra;
                    vendaDB.DtPrimParcelaCartao = venda.DtPrimParcelaCartao;
                    vendaDB.DtSaldo = venda.DtSaldo;
                    //vendaDB.FormaPagamento_Vendas = venda.f
                    vendaDB.FormaPagtoComissaoCorretor = venda.FormaPagtoComissaoCorretor;
                    vendaDB.Gravame = venda.Gravame;
                    vendaDB.idCliente = venda.IdCliente;
                    vendaDB.idCorretor = venda.IdCorretor;
                    vendaDB.idVendedor = venda.IdVendedor;
                    vendaDB.idVenda = venda.Id;
                    vendaDB.LicenciamentoMes = venda.LicenciamentoMes;
                    vendaDB.QtdeVezesCartao = venda.QtdeVezesCartao;
                    vendaDB.SaldoDescontar = venda.SaldoDescontar;
                    vendaDB.SaldoPagar = venda.SaldoPagar;
                    vendaDB.SaldoQuitacao = venda.SaldoQuitacao;
                    vendaDB.ValorMultas = venda.ValorMultas;
                    vendaDB.VlrCartao = venda.VlrCartao;
                    vendaDB.VlrCheque = venda.VlrCheque;
                    vendaDB.VlrComissaoCorretor = venda.VlrComissaoCorretor;
                    vendaDB.VlrCompra = venda.VlrCompra;
                    vendaDB.VlrEspecie = venda.VlrEspecie;
                    vendaDB.VlrLicenciamento = venda.VlrLicenciamento;
                    vendaDB.VlrTransfBancaria1 = venda.VlrTransfBancaria1;
                    vendaDB.VlrTransfBancaria2 = venda.VlrTransfBancaria2;
                }

                try
                {
                    dc.SubmitChanges();
                    return vendaDB.idVenda;
                }
                catch (Exception ex)
                {
                    string date = ((DateTime.Now).ToString()).Substring(0, 9);
                    date = date.Replace('/', '-');
                    string location = "\\\\Servidor\\SharedDocs\\Aplicação\\Log";
                    string path = (String.Format("{0}{1}\\Problema Gravação_{2}.txt", @"", location, date));
                    StreamWriter valor = new StreamWriter(path, true, Encoding.ASCII);
                    valor.WriteLine("Erro ao salvar: " + vendaDB.idVenda);
                    valor.WriteLine(ex.Message);
                    valor.WriteLine("------------------------------------------------------");
                    valor.Close();

                    dc.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues);
                    dc.SubmitChanges();

                    return -1;
                }
            }
        }

        public static bool Delete(int id)
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                DM.Venda vendaDB = (from v in dc.Vendas
                                    where v.idVenda == id
                                    select v).FirstOrDefault();

                if (vendaDB != null)
                {
                    try
                    {
                        dc.Vendas.DeleteOnSubmit(vendaDB);
                        dc.SubmitChanges();
                        return true;
                    }
                    catch (Exception ex)
                    {
                        string date = ((DateTime.Now).ToString()).Substring(0, 9);
                        date = date.Replace('/', '-');
                        string location = "\\\\Servidor\\SharedDocs\\Aplicação\\Log";
                        string path = (String.Format("{0}{1}\\Problema Exclusão_{2}.txt", @"", location, date));
                        StreamWriter valor = new StreamWriter(path, true, Encoding.ASCII);
                        valor.WriteLine("Erro ao excluir:" + vendaDB.idVenda);
                        valor.WriteLine(ex.Message);
                        valor.WriteLine("------------------------------------------------------");
                        valor.Close();

                        dc.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues);
                        dc.SubmitChanges();

                        return true;
                    }
                }
                else
                    return false;
            }
        }

        private static DO.Venda FillRecord(DM.Venda venda)
        {
            DO.Venda vendaMapping = new DO.Venda();

            vendaMapping.BancoGravame = venda.BancoGravame;
            vendaMapping.ClassificacaoGravame = venda.ClassificacaoGravame;
            vendaMapping.ClassificacaoMultas = venda.ClassificacaoMultas;
            vendaMapping.DtCompra = venda.DtCompra;
            vendaMapping.DtPrimParcelaCartao = venda.DtPrimParcelaCartao;
            vendaMapping.DtSaldo = venda.DtSaldo;
            //vendaMapping.FormaPagamento_Vendas = venda.f
            vendaMapping.FormaPagtoComissaoCorretor = venda.FormaPagtoComissaoCorretor;
            vendaMapping.Gravame = venda.Gravame;
            vendaMapping.IdCliente = venda.idCliente;
            vendaMapping.IdCorretor = venda.idCorretor;
            vendaMapping.IdVendedor = venda.idVendedor;
            vendaMapping.Id = venda.idVenda;
            vendaMapping.LicenciamentoMes = venda.LicenciamentoMes;
            vendaMapping.QtdeVezesCartao = venda.QtdeVezesCartao;
            vendaMapping.SaldoDescontar = venda.SaldoDescontar;
            vendaMapping.SaldoPagar = venda.SaldoPagar;
            vendaMapping.SaldoQuitacao = venda.SaldoQuitacao;
            vendaMapping.ValorMultas = venda.ValorMultas;
            vendaMapping.VlrCartao = venda.VlrCartao;
            vendaMapping.VlrCheque = venda.VlrCheque;
            vendaMapping.VlrComissaoCorretor = venda.VlrComissaoCorretor;
            vendaMapping.VlrCompra = venda.VlrCompra;
            vendaMapping.VlrEspecie = venda.VlrEspecie;
            vendaMapping.VlrLicenciamento = venda.VlrLicenciamento;
            vendaMapping.VlrTransfBancaria1 = venda.VlrTransfBancaria1;
            vendaMapping.VlrTransfBancaria2 = venda.VlrTransfBancaria2;

            return vendaMapping;
        }
    }
}
